package com.chukun.interview.leetcode;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * @author chukun
 * @version 1.0.0
 * @description 有效的字母异位词
 * @createTime 2023年05月08日 23:19:00
 */
public class HeterotopicWord {

    public static void main(String[] args) {
        String s = "anagram";
        String t = "nagaram";

        System.out.println(isAnagram02(s, t));

    }

    /**
     * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词
     * 若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词
     * 排序，比较是否相同
     * @param s
     * @param t
     * @return
     */
    public static boolean isAnagram01(String s, String t) {
        char[] chars01 = s.toCharArray();
        char[] chars02 = t.toCharArray();
        Arrays.sort(chars01);
        Arrays.sort(chars02);
        return String.valueOf(chars01).equals(String.valueOf(chars02));
    }

    /**
     * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词
     * 若 s 和 t 中每个字符出现的次数都相同，则称 s 和 t 互为字母异位词
     * 利用map比较
     * @param s
     * @param t
     * @return
     */
    public static boolean isAnagram02(String s, String t) {
        Map<Character, Integer> numberMap = new HashMap<>(s.length());
        for (char c : s.toCharArray()) {
            if (numberMap.containsKey(c)) {
                numberMap.put(c, numberMap.get(c) + 1);
            } else {
                numberMap.put(c, 1);
            }
        }
        for (char c : t.toCharArray()) {
            if (numberMap.containsKey(c)) {
                Integer number = numberMap.get(c);
                if (number -1 ==0) {
                    numberMap.remove(c);
                } else {
                    numberMap.put(c, number- 1);
                }
            } else {
                return false;
            }
        }
        return numberMap.isEmpty();
    }
}
